/*
	基类和派生类之间的指针和对象的关系
*/

#include <iostream>
#include <cstring>

using namespace std;

class B_class {
	public:
		void put_name(const char * s) {
			strcpy(name, s);
		}
		void show_name() {
			cout << name << endl;
		}
	
	private:
		char name[80];
};

class D_class : public B_class {
	private:
		char phone_num[80];

	public:
		void put_phone(const char * num) {
			strcpy(phone_num, num);
		}
		void show_phone() {
			cout << phone_num << endl;
		}
};

int main(int argc, char * argv[]) {
	B_class * p;
	B_class B_ob;
	D_class * dp;
	D_class D_ob;

	p = & B_ob;
	p->put_name("B_ob: Thomas Edison");

	p = & D_ob;
	p->put_name("D_ob: Albert Einstein");

	B_ob.show_name();
	D_ob.show_name();

	dp = & D_ob;
	dp->put_phone("15764231503");
	dp->show_phone();

	//try {
	//	p->show_phone();
	//} catch(...) {
	//
	//}

	// 基类指针强制转换为派生类指针访问派生类
	((D_class*)p)->show_phone();

	//try {
	//	p->show_phone();
	//} catch(...) {
	//
	//}
	
	return 0;
}
